#ifndef ODN_BASEENTITY_H
#define ODN_BASEENTITY_H

#include "ODN_String.h"
#include "ODN_Message.h"

#define DECLARE_ENTITY_CLASS(className) static ouden::CBaseEntity* create(ouden::String sName){return new className(sName);}

namespace ouden {

class CBaseEntity// : public IMessageReceiver
{
	//Give the CGameWorld class access to the entity constructor
	friend class CGameWorld;

	public:

		//DECLARE_ENTITY_CLASS(CBaseEntity);

		//Main update function for all entities
		virtual void update() = 0;

		//Get the name of the entity
		String getName() 		{ return m_sName; }

	protected:

		//Constructor and destructor
		//These are protected so that an entity can only be instantiated through
		// the createEntity<>() function of CGameWorld as it is given friend access
		CBaseEntity(String name);
		virtual ~CBaseEntity();

		//Name identifier of the entity
		//String m_sName;
		String m_sName;

	private:
};

} //namespace ouden

#endif // ODN_BASEENTITY_H
